import * as pdfjsLib from 'pdfjs-dist';
import type { ResumeData } from '../types';

// 设置worker的路径。这是pdfjs-dist的官方标准用法。
// 我们指向npm包里预编译好的worker文件。
pdfjsLib.GlobalWorkerOptions.workerSrc = chrome.runtime.getURL('pdfjs/pdf.worker.min.mjs');
async function extractTextFromPdf(file: File): Promise<string> {
  const arrayBuffer = await file.arrayBuffer();
  // 使用getDocument API，它返回一个加载任务
  const loadingTask = pdfjsLib.getDocument(arrayBuffer);
  // 等待PDF文档加载完成
  const pdf = await loadingTask.promise;

  let fullText = '';
  // 遍历每一页
  for (let i = 1; i <= pdf.numPages; i++) {
    const page = await pdf.getPage(i);
    const textContent = await page.getTextContent();
    // 将每一页的文本块连接起来
    const pageText = textContent.items.map(item => ('str' in item ? item.str : '')).join(' ');
    fullText += pageText + '\n';
  }

  return fullText;
}

// callKimiApi 函数保持不变，因为它只关心接收到的文本
export async function callKimiApi(apiKey: string, file: File): Promise<ResumeData> {
  console.log("开始使用 pdfjs-dist 解析PDF文本...");
  const resumeText = await extractTextFromPdf(file);
  console.log("PDF文本提取完毕，文本长度:", resumeText.length);

  const prompt = `
    你是一个专业的HR助理，你的任务是从以下简历文本中，精确地提取信息，并以JSON格式返回。
    请严格按照我定义的JSON结构返回，不要添加任何额外的解释或注释。
    如果某个字段在简历中找不到，请返回空字符串 ""。
    日期请尽量格式化为 "YYYY-MM" 或 "YYYY-MM-DD"。

    JSON结构定义:
    {
      "basicInfo": { "name": "", "email": "", "phone": "" },
      "education": { "school": "", "major": "", "degree": "", "startDate": "", "endDate": "" }
    }

    ---
    简历文本如下:
    ${resumeText}
    ---
  `;

  console.log("正在调用Kimi API...");
  // ... fetch 部分完全不变
  const response = await fetch('https://api.moonshot.cn/v1/chat/completions', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${apiKey}`,
    },
    body: JSON.stringify({
      model: 'moonshot-v1-8k',
      messages: [{ role: 'user', content: prompt }],
      temperature: 0.0,
      response_format: { type: "json_object" },
    }),
  });

  if (!response.ok) {
    const errorBody = await response.json();
    console.error("Kimi API 调用失败:", errorBody);
    throw new Error(`API 请求失败: ${errorBody.error?.message || response.statusText}`);
  }

  const result = await response.json();
  const content = result.choices[0].message.content;

  console.log("Kimi API 返回的原始内容:", content);

  try {
    const parsedJson = JSON.parse(content);
    return parsedJson as ResumeData;
  } catch (e) {
    console.error("解析Kimi返回的JSON内容时失败:", e);
    throw new Error("AI返回的JSON格式不正确，请稍后重试。");
  }
}